@Query এবং @NamedQuery অ্যানোটেশন এর মাধ্যমে Named Query তৈরি করা

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Native Query এবং Named Query
199

@Query অ্যানোটেশন

Spring Data JPA-তে @Query অ্যানোটেশন ব্যবহার করে কাস্টম SQL বা JPQL (Java Persistence Query Language) কোয়েরি লেখা যায়। এটি ডাটাবেস অপারেশনকে আরও কাস্টমাইজ করার সুযোগ দেয় এবং ডিফল্ট মেথডের বাইরে বিশেষ কন্ডিশনে ডেটা রিট্রিভ বা ম্যানিপুলেট করার জন্য ব্যবহার হয়।

@Query এর ব্যবহার

@Query অ্যানোটেশন সরাসরি একটি Repository ইন্টারফেসের মেথডের ওপরে ব্যবহার করা হয়।

সাধারণ উদাহরণ:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    @Query("SELECT e FROM Employee e WHERE e.department = :department")
    List<Employee> findByDepartment(@Param("department") String department);
}

বিবরণ:

  • @Query এর মধ্যে JPQL (Hibernate-সমর্থিত SQL) কোয়েরি ব্যবহার করা হয়েছে।
  • @Param ব্যবহার করে প্যারামিটার ম্যাপিং করা হয়েছে।

@NamedQuery অ্যানোটেশন

@NamedQuery হলো Hibernate এবং JPA-তে পূর্বনির্ধারিত কাস্টম কোয়েরি। এটি Entity ক্লাসে ডিফাইন করা হয় এবং Spring Data JPA এর মাধ্যমে ডাকা হয়। @NamedQuery-এর প্রধান সুবিধা হলো কোয়েরি একবার কম্পাইল হওয়ার পর একাধিকবার পুনর্ব্যবহারযোগ্য হওয়া।

@NamedQuery এর ব্যবহার

Entity ক্লাসে @NamedQuery ডিফাইন করা:

import jakarta.persistence.*;

@Entity
@NamedQuery(name = "Employee.findByDepartment", query = "SELECT e FROM Employee e WHERE e.department = :department")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String department;

    // Getters and Setters
}

Repository ইন্টারফেসে @NamedQuery ব্যবহার:

import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    List<Employee> findByDepartment(@Param("department") String department);
}

@Query এবং @NamedQuery এর মধ্যে পার্থক্য

বৈশিষ্ট্য@Query@NamedQuery
ডিফাইন করার স্থানRepository ইন্টারফেসে ডিফাইন করা হয়।Entity ক্লাসে ডিফাইন করা হয়।
কোডের স্থানীয়তানির্দিষ্ট মেথডের জন্য সীমাবদ্ধ।পুনর্ব্যবহারযোগ্য, বিভিন্ন মেথডে ব্যবহার করা যায়।
কোড সংরক্ষণকোয়েরি প্রতি মেথডে আলাদা সংরক্ষণ।একবার সংরক্ষণ করে বারবার ব্যবহার।
সহজতানতুন মেথড যোগ করা সহজ।নতুন মেথড যোগ করার আগে Entity আপডেট করতে হয়।

উদাহরণ: @Query এবং @NamedQuery একত্রে ব্যবহার

@Query ব্যবহার:

@Query("SELECT e FROM Employee e WHERE e.salary > :salary")
List<Employee> findEmployeesWithSalaryGreaterThan(@Param("salary") Double salary);

@NamedQuery ব্যবহার:

@Entity
@NamedQuery(name = "Employee.findEmployeesWithSalaryGreaterThan", query = "SELECT e FROM Employee e WHERE e.salary > :salary")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double salary;

    // Getters and Setters
}

Repository মেথড:

List<Employee> findEmployeesWithSalaryGreaterThan(@Param("salary") Double salary);

সারাংশ

  • @Query অ্যানোটেশন দ্রুত কাস্টম কোয়েরি লেখার জন্য Repository লেয়ারে ব্যবহার করা হয়।
  • @NamedQuery আগে থেকেই ডিফাইন করা কাস্টম কোয়েরি পুনর্ব্যবহার করার জন্য Entity ক্লাসে ব্যবহার করা হয়।
  • এই দুই অ্যানোটেশন ডেটাবেস অপারেশনকে আরও ফ্লেক্সিবল এবং কার্যকর করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...